package com.e.library.http;

import java.util.Map;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

/**
 * http://www.xiannongfenxiang.com
 * Created by lxy on 2016/8/22 15:59.
 * 注：果聊大部分接口都是post,即使某个理应用get
 */
public interface EApi {

    String HOST = "http://www.xiannongfenxiang.com/";
    String BASE_URL = HOST+"Shop/";
    String URL_LOGIN = "Login/login";               //登录
    String URL_TOPIC = "Room/getTopic";             //获取话题
    String URL_ADD_TOPIC = "Room/addTopic";         //添加话题
    String URL_CREATE_ROOM = "Room/creatRoom";      //开始直播
    String URL_SET_PEOPLE = "Room/setpeople";       //设置房间人数
    String URL_SET_PASSWORD = "Room/setpassword";   //设置密码
    String URL_VIEW = "Room/getView";               //获取房间人数
    String URL_CATEGORIES = "Room/getcate";         //获取频道分类列表
    String URL_VIDEO_END = "Room/videoEnd";         //直播结束
    String URL_ADD_PIC = "Room/appPic";             //上传图片
    String URL_REPORT = "User/informSomeOne";       //举报某人
    String URL_RED_PACKET = "Packet/packet";        //发红包
    String URL_OPEN_PACKET = "Packet/getPacket";    //打开红包
    String URL_USER = "Index/getUserInfo";          //个人信息
    String URL_ATTENTION = "Friend/attentionSomeOne";//关注
    String URL_CHAT = "Index/savechat";             //发送私聊信息（发送环信信息以后，还要请求这个接口保存聊天内容）
    String URL_UNREAD = "Index/getUnreal";          //未读消息
    String URL_MESSAGES = "Index/getnewMsg";        //我的私信列表
    String URL_CITIES = "Live/getRegion";           //城市列表
    String URL_SDK_LOGIN = "Login/appsdkLogin";     //第三方登录
    String URL_COIN = "Index/getCoinDetail";        //获取金币

    String TYPE_WECHAT = "wechat";
    String TYPE_QQ = "qq";
    String TYPE_SINA = "sina";

    /**
     * post
     * @param url
     * @param params
     * @return
     */
    @FormUrlEncoded
    @POST("{url}")
    Observable<EResponse> post(@Path(value = "url", encoded = true) String url, @FieldMap(encoded = true) Map<String, String> params);

    /**
     * 注：
     * 此接口仅是为个别参数而设计
     * 如仅需参数is_app和session_id相关的接口，因为果聊大部分接口是post
     * post
     * @param is_app 1
     * @return
     */
    @FormUrlEncoded
    @POST("{url}")
    Observable<EResponse> post(@Path(value = "url", encoded = true) String url,@Field("is_app") String is_app);

    /**
     * get
     * @param url
     * @param params
     * @return
     */
    @GET("{url}")
    Observable<EResponse> get(@Path(value = "url", encoded = true) String url, @QueryMap(encoded = true) Map<String, String> params);

    /**
     * get
     * @param url
     * @return
     */
    @GET("{url}")
    Observable<EResponse> get(@Path(value = "url", encoded = true) String url);

    @FormUrlEncoded
    @POST(URL_LOGIN)
    Observable<EResponse> login(@Field("account") String account, @Field("password") String password);

    /**
     * 第三方登录
     * @param type 第三方标识（默认为wechat，分别为wechat、qq、sina）
     * @param openid 用户openid（ps：微信登录参数值使用授权成功返回的unionid作为值，openid是无法匹配到数据的）
     * @param nickname 昵称
     * @return
     */
    @FormUrlEncoded
    @POST(URL_SDK_LOGIN)
    Observable<EResponse> sdkLogin(@Field("type") String type, @Field("openid") String openid, @Field("nickname") String nickname);

    @FormUrlEncoded
    @POST(URL_ADD_TOPIC)
    Observable<EResponse> addTopic(@Field("name") String name);

    /**
     * 设置房间人数
     * @param id 直播间ID
     * @param num
     * @return
     */
    @FormUrlEncoded
    @POST(URL_SET_PEOPLE)
    Observable<EResponse> people(@Field("id") String id, @Field("people_num") String num);

    /**
     * 设置房间密码
     * @param id 直播间ID
     * @param num
     * @return
     */
    @FormUrlEncoded
    @POST(URL_SET_PASSWORD)
    Observable<EResponse> password(@Field("id") String id, @Field("password") String num);

    /**
     * 获取房间人数
     * @param id 直播间ID
     * @param imroom_id 环信聊天室ID
     * @return
     */
    @FormUrlEncoded
    @POST(URL_VIEW)
    Observable<EResponse> view(@Field("id") String id, @Field("imroom_id") String imroom_id);

    /**
     * 直播结束
     * @param id
     * @param duration
     * @return
     */
    @FormUrlEncoded
    @POST(URL_VIDEO_END)
    Observable<EResponse> end(@Field("id") String id, @Field("videotime") String duration);

    /**
     * 上传图片
     * @param img 图片base64编码
     * @return
     */
    @FormUrlEncoded
    @POST(URL_ADD_PIC)
    Observable<EResponse> upload(@Field("img") String img);

    /**
     * 举报
     * @param inform_way 0:直播  ，1：个人中心
     * @param reason
     * @param image json格式，图片集
     * @return
     */
    @FormUrlEncoded
    @POST(URL_REPORT)
    Observable<EResponse> report(@Field("inform_way") String inform_way, @Field("reason") String reason,@Field("image") String image);

    /**
     * 打开红包
     * @param roomid 房间ID
     * @param id 红包ID
     * @return
     */
    @FormUrlEncoded
    @POST(URL_OPEN_PACKET)
    Observable<EResponse> openPacket(@Field("roomid") String roomid, @Field("id") String id);

    /**
     * 私信
     * @param to_id
     * @param msgtxt
     * @return
     */
    @FormUrlEncoded
    @POST(URL_CHAT)
    Observable<EResponse> chat(@Field("to_id") String to_id, @Field("msgtxt") String msgtxt);

    /**
     * 用户详情
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST(URL_USER)
    Observable<EResponse> user(@Field("id") String id);

    /**
     * 关注
     * @param to_id
     * @return
     */
    @FormUrlEncoded
    @POST(URL_ATTENTION)
    Observable<EResponse> attention(@Field("to_id") String to_id);

}
